package com.shuang.link3;

public class ReverseList {
    public ListNode reverseList(ListNode head) {

        //双指针方法

        //判断链表是否为空为空直接返回即可
        if (head == null){
            return head;
        }

        //链表不为空
        //指向当前位置 （当前位置的指向要反转） 的指针
        ListNode curr = head;
        //指向当前位置的前一个位置
        ListNode pre = null;
        //用于保存当前位置的指向的指针 （因为当前位置的指向要反转了所以先保存之前指向的下一个位置用于curr的移动）
        ListNode temp = null;

        while (curr != null){
            //保存位置
            temp = curr.next;
            //反转当前位置的指向
            curr.next = pre;
            //pre 移动到curr的位置 （向后移动一位）
            pre = curr;
            //curr 移动到保存的位置 （向后移动一位）
            curr = temp;
        }

        //循环结束pre指向反转过后的新链表的头
        return pre;
    }
}
